unittest
{
	assert( [ "3", "3 5 -1" ].parse.expand.solve == "12\n8\n10" );
	assert( [ "5", "1 1 1 2 0" ].parse.expand.solve == "4\n4\n4\n2\n4" );
	assert( [ "6", "-679 -2409 -3258 3095 -3291 -4462" ].parse.expand.solve == "21630\n21630\n19932\n8924\n21630\n19288" );
}



import std.algorithm;
import std.conv;
import std.math;
import std.range;
import std.stdio;
import std.string;
import std.typecons;

void main()
{
	stdin.byLineCopy.parse.expand.solve.writeln;
}

auto parse( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto n = input.front.strip.to!( long );
	input.popFront;
	auto as = input.front.split.to!( long[] );
	return tuple( as );
}

auto solve( long[] as )
{
	// 出発地点と帰着地点として座標0を足す
	as = [ 0L ] ~ as ~ [ 0L ];
	
	// 普通に全部回ったときの金額を出す
	auto f = 0L;
	foreach( i; 1 .. as.length )
	{
		f += ( as[ i ] - as[ i - 1 ] ).abs;
	}
	
	// 1 .. n のどれかをスキップした時の金額を出す
	auto ss = new long[ as.length - 2 ];
	foreach( i; 1 .. as.length - 1 )
	{
		if( ( as[ i - 1 ] <= as[ i ] && as[ i ] <= as[ i + 1 ] ) ||
		    ( as[ i + 1 ] <= as[ i ] && as[ i ] <= as[ i - 1 ] ) )
		{
			// 通過なら金額減らない
			ss[ i - 1 ] = f;
		}
		else
		{
			// 折り返しているなら往復分の金額が減る
			auto dl = ( as[ i - 1 ] - as[ i ] ).abs;
			auto dr = ( as[ i ] - as[ i + 1 ] ).abs;
			ss[ i - 1 ] = f - 2 * min( dl, dr );
		}
	}
	
	return ss.to!( string[] ).join( "\n" );
}
