import qualified Data.Map as M

main = do
  [n,k] <- map read.words <$> getLine :: IO [Int]
  as    <- map read.words <$> getLine :: IO [Int]
  let ds = M.fromList $ zip [1..] $ map ((k+1)-) as
  putStr $ solve n k ds [] 0

solve :: Int -> Int -> M.Map Int Int -> [Int] -> Int -> String
solve n k ds acc step
  | step == k && able = show (n+k*(n-1)) ++ "\n" ++ unwords ( map show (ans n k acc 0) )
  | step == k && not able = "-1"
  | otherwise = solve n k (M.insert mk (mv-1) ds) (mk:acc) (step+1)
  where
  able = all (<=0) ds
  (mk,mv) = M.foldlWithKey (\(mk,mv) k v -> if v > mv && k /= prev then (k,v) else (mk,mv) ) (0,-100) ds
  prev = if null acc then 0 else head acc
  ans n k (a:as) 0 = filter (/=a) [1..n] ++ a : ans n k (a:as) 1
  ans n k [a] _    = filter (/=a) [1..n]
  ans n k (a:b:as) step = filter (\i -> i/=a && i/=b) [1..n] ++ b : ans n k (b:as) (step+1)

-- 下記の操作で、財宝が見つからなかったとき、移動回数は1以上消費される。
-- 操作：財宝が存在する可能性のあるすべての箱を開ける。最後の箱は開けたままにする。
-- 操作をK+1回繰り返せば、必ず財宝が見つかる。(最初のK回で移動回数がすべて消費されるから。)
-- 1回目の操作で、財宝が存在する可能性がある箱はN個である。
-- 2回目以降の操作で、財宝が存在する可能性がある箱はN-1個(開いている箱を除く)である。
-- それぞれの箱が開けられる回数は、(K+1)-(最初のK回の操作のうち、最後に開けられた回数) である。
-- K回の操作で、どの箱を最後に開けるかを選べばよいが、下記の不足回数が最大の箱を選び、選ぶたびに1減らせばよい。
-- 不足回数：すべての操作で開けるには何回足りないか、すなわち最後に開けられる回数の必要最小限。(K+1-a_i)
-- ※ただし、連続して2度選ばれることはできない。(操作で開けない箱を最後に開けることはできないから。)
-- 最後に開ける箱をすべて選び終わった後、すべての箱の不足回数がゼロ以下であれば、勝てる。
-- 箱を開ける回数は、N + K(N-1) である。